package org.example.hansp.array_.two_dimensional_array;

import java.util.Scanner;
/*
* 数独游戏
* 检查输入的一个数独的解决方案是否成功*/
public class CheckSudokuSolution {
    public static void main(String[] args) {
        int[][] sudoku = createSudoku();
        System.out.println(isValidSudoku(sudoku)?"Valid Sudoku":"Invalid Sudoku");
    }

    public static int[][] createSudoku() {
        Scanner sc = new Scanner(System.in);
        int[][] SudoArray=new int[9][9];
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                SudoArray[i][j]=sc.nextInt();
            }
        }
        return SudoArray;
    }
    public static boolean isValidSudoku(int[][] sudoku) {
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                if (sudoku[i][j]<1||sudoku[i][j]>9||!isValidSudoku(i,j,sudoku)) {
                    return false;
                }
            }
        }
        return true;

    }
    public static boolean isValidSudoku(int i,int j,int[][] sudoku) {
//        判断第i行是否合理
        for(int column=0;column<9;column++){
            if(!(column==j)&&sudoku[i][column]==sudoku[i][j]){
                return false;
            }
        }
//        判断第j列是否合理
            for(int row=0;row<9;row++){
                if(!(row==i)&&sudoku[row][j]==sudoku[i][j]){
                    return false;
                }
            }
//            判断每个3*3是否合理
            for(int row=(i/3)*3;row<(i/3)*3+3;row++){
                for(int column=(j/3)*3;column<(j/3)*3+3;column++){
                    if(!(row==i&&column==j)&&sudoku[row][column]==sudoku[i][j]){
                        return false;
                    }
                }
            }
            return true;
        }

}
